import UIKit

/**
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=18

    第18课
        函数作为返回值
        内嵌函数
        
*/



/**
 函数 + 参数
 func test(param:Bool)
 
 返回值
 (Int) -> Int
 */

func test(param:Bool) -> (Int) -> Int {
    func currentValue(value: Int) -> Int {
        return value
    }
    
    func doubleValue(value: Int) -> Int {
        return value * 2
    }
//    return (Int) -> Int
    return param ? currentValue : doubleValue
}


func test2(param:Bool) -> (Int) -> Int {
    // 不好看，逻辑不清晰，不推荐
    // return (Int) -> Int
    return param ?
        {(value: Int) -> Int in
            print("param == true")
            // 可以调用 带有返回值的函数， 我采用匿名函数了
            return value * 1
        }
        :
        {(value: Int) -> Int in
            print("param == false")
            return value * 2
        }
}

let a = test(param: true)
let b = test(param: false)
print(type(of: a))
print(a(2))
print(b(2))
print("-----------------------")

// 简写
print(test(param: true)(4))
print(test(param: false)(4))

print("-----------------------")

// 简写
print(test2(param: true)(5))
print(test2(param: false)(5))

